package modelo;


import static org.junit.Assert.*;
import geometria.Coordenada;

import org.junit.*;
import modelo.Velocidad;


public class MovimientosDeCoordenadasConVelocidad {

	@Test
	public void testMoverConociendoCoordenadas() {
		
		Velocidad v1 = new Velocidad(3D,4D);
		Coordenada inicio = new Coordenada(1D,1D);
		Coordenada destino = new Coordenada(31D,41D);
		Coordenada intermedio = new Coordenada(7D,9D);
		
		inicio.mover(destino, 2D, v1.getModulo());
		assertTrue(inicio.coincideCon(intermedio,0D));
		
		
	}
	
	@Test
	public void testOtroMoverConociendoDosCoordenadasConMuchaVelocidad() {
		// Este test prueba que no importa el modulo de la velocidad,
		// cuando llegue a destino me voy a dejar de mover en ese sentido.
		Velocidad v1 = new Velocidad(400D,400D);
		Coordenada inicio = new Coordenada(1D,1D);
		Coordenada destino = new Coordenada(8D,8D);
		inicio.mover(destino, 2D, v1.getModulo());
		assertTrue(inicio.coincideCon(destino,1D));
		
		
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	// Los tests que siguen creo que ya no sirven 
	
	
	@Test
	public void testMovimientoConVelocidad0() {
		Coordenada c1, c2;
		Velocidad v1;

		v1 = new Velocidad();
		c1 = new Coordenada(10D, 0D);
		c2 = c1.moverConVelocidad(v1, 3D);
		assertTrue(c1.coincideCon(c2,0D));
	}

	@Test
	public void testMovimientoConTiempo0() {
		Coordenada c1, c2;
		Velocidad v1;

		v1 = new Velocidad(5D, 5D);
		c1 = new Coordenada(10D, 0D);
		c2 = c1.moverConVelocidad(v1, 0D);
		assertTrue(c1.coincideCon(c2,0D));
	}

	@Test
	// TODO usar expected
	public void testMovimientoConTiempoNegativo() {
		Coordenada c1;
		Velocidad v1;

		v1 = new Velocidad(5D, 5D);
		c1 = new Coordenada(10D, 0D);
		try {
			c1.moverConVelocidad(v1, -1D);
			fail();
		} catch (TiempoInvalidoException e) {
			assertTrue(true);
		}
	}
	
	@Test
	public void testMovimientoConVelocidad(){
		Coordenada c1, c2;
		Velocidad v1;
		
		v1 = new Velocidad(10D,5D);
		c1 = new Coordenada(20D, 30D);
		c2 = new Coordenada(50D,45D);
		
		c1 = c1.moverConVelocidad(v1, 3D);
		assertTrue(c1.coincideCon(c2,0D));
	}
	
	@Test
	public void testMovimientoConVelocidadConCoordenadaNegativa(){
		Coordenada c1, c2;
		Velocidad v1;
		v1 = new Velocidad(-10D,5D);
		c1 = new Coordenada(20D, 30D);
		c2 = new Coordenada(10D,35D);
		c1 = c1.moverConVelocidad(v1, 1D);
		assertTrue(c1.coincideCon(c2,0D));
	}

}
